{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# LR实现线性预测"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**任务:**\n",
    "\n",
    "基于generated_data.csv数据，建立线性回归模型，预测x=3.5对应的y值，评估模型表现"
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "@Author  : Flare Zhao\n",
    "@QQ-Email & Wechat: 454209979\n",
    "@QQ讨论群：530533630  申请加群的验证信息为订单号（粘贴号码数字即可）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "#load the data\n",
    "import pandas as pd\n",
    "data = pd.read_csv('generated_data.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'> (10, 2)\n"
     ]
    }
   ],
   "source": [
    "data.head()\n",
    "print(type(data), data.shape)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0     1\n",
      "1     2\n",
      "2     3\n",
      "3     4\n",
      "4     5\n",
      "5     6\n",
      "6     7\n",
      "7     8\n",
      "8     9\n",
      "9    10\n",
      "Name: x, dtype: int64 0     7\n",
      "1     9\n",
      "2    11\n",
      "3    13\n",
      "4    15\n",
      "5    17\n",
      "6    19\n",
      "7    21\n",
      "8    23\n",
      "9    25\n",
      "Name: y, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "#data赋值\n",
    "x = data.loc[:,'x']\n",
    "y = data.loc[:,'y']\n",
    "print(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAb8AAAGsCAYAAABNUalHAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjYsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvq6yFwwAAAAlwSFlzAAAPYQAAD2EBqD+naQAAJipJREFUeJzt3QtwlNXdx/H/JkCCmEQDhE1eAgS8YARREChKFSZcx4mgeMFCAUWdMqAi4gVbQF6wUWypg9BQHQUdRKwzBgHHTLkZyshFSKmk2JRgECgJV3MhmsAk+87/vN2UDZuQDRv2cr6fmWc2zzlnH86uyC/nPOfsOlwul0sAALBIRKA7AADAlUb4AQCsQ/gBAKxD+AEArEP4AQCsQ/gBAKxD+AEArNNCwkBNTY0cO3ZMYmJixOFwBLo7AIAA0a3r5eXlkpSUJBEREeEdfhp8ycnJge4GACBIHDlyRDp27Bje4acjPveLjY2NDXR3AAABUlZWZgZD7lwI6/BzT3Vq8BF+AADHJW6BseAFAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGCdsPh4MwBA6KquccmuwjNyorxSEmKipV9KvERGOIJn5JeRkSF9+/Y1HxiakJAgo0ePlvz8fI82gwYNMp+pduHxq1/96pJfQTFnzhxJTEyU1q1by5AhQ+TAgQNNe0UAgJCRnVckA1/fLI+8s0OeWb3XPOq5lgdN+OXk5MjUqVNlx44dsmHDBjl//rwMGzZMKioqPNo98cQTUlRUVHssXLiwwetq/eLFi2XZsmWyc+dOadOmjQwfPlwqKyub9qoAAEEvO69IpqzMlaJSz3/ri0srTXlzBqBP057Z2dke5ytWrDAjwD179shdd91VW37VVVeJ0+ls1DV11Pfmm2/Kb37zGxk1apQp++CDD6RDhw6yZs0aGTt2rC9dBACEyFTnvHX7xeWlTst00lPrh6Y6m2UK9LIWvJSWlprH+Ph4j/IPP/xQ2rVrJz169JBZs2bJjz/+WO81CgsLpbi42Ex1usXFxUn//v1l+/btXp9TVVVlvrPpwgMAEDp2FZ65aMRXNwC1XtsF1YKXmpoamT59utx5550m5Nx+8YtfSOfOnc1XyH/zzTfy4osvmvuCn376qdfraPApHeldSM/ddd7uPc6bN6+pXQcABJgubvFnuysWfnrvLy8vT7Zt2+ZR/uSTT9b+3LNnT7OIJS0tTQ4ePCjdunUTf9DR5IwZMy765l4AQGhIiIn2a7srMu05bdo0Wb9+vWzZskU6duzYYFudvlQFBQVe6933Bo8fP+5Rruf13TeMioqq/dZ2vr0dAEJPv5R4SYyLNvf2vNFyrdd2AQ8/XZyiwZeVlSWbN2+WlJSUSz5n79695lFHgN7oNTTkNm3a5DGS01WfAwYM8KV7AIAQERnhkLnpqebnugHoPtf65trvF+HrVOfKlStl1apVZq+f3pPT46effjL1OrU5f/58s/rz0KFDsnbtWpkwYYJZCXrLLbfUXqd79+4mQJXuA9R7hwsWLDDt9+3bZ56j9wx1HyEAIDyN6JEomeN7izPOc2pTz7Vc65uLT/f8MjMzazeyX2j58uUyadIkadWqlWzcuNFsXdC9f3ofbsyYMWYbw4V0AYx7pah64YUXTHu9X1hSUiIDBw402yqio5tnrhcAEBw04HQ7w5X+hBeHS+cyQ5xOk+r2CA1U7v8BgL3KGpkHfLA1AMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOi0C3QEAQPOrrnHJrsIzcqK8UhJioqVfSrxERjjEVoQfAIS57LwimbduvxSVVtaWJcZFy9z0VBnRI1FsxLQnAIR58E1ZmesRfKq4tNKUa72NCD8ACOOpTh3xubzUuf7zqPXazjaEHwCEKb3HV3fEdyGXiKnXdrYh/AAgTOniFn+2CyeEHwCEKV3V6c924YTwA4AwpdsZdFVnfRsaHP9Z9antbEP4AUCY0n18up1B1Q1Ax38etd7G/X6EHwCEMd3Hlzm+tzjjPKc2nXHRptzWfX5scgeAMKcBNzTVySe8NHXkl5GRIX379pWYmBhJSEiQ0aNHS35+fm39mTNn5KmnnpIbb7xRWrduLZ06dZKnn35aSktLG7zupEmTxOFweBwjRozwpWsAgAZo0A3o1lZG3fo/5tHm4PM5/HJycmTq1KmyY8cO2bBhg5w/f16GDRsmFRUVpv7YsWPm+N3vfid5eXmyYsUKyc7OlsmTJ1/y2hp2RUVFtcdHH33U9FcFAEADHC6Xq8lb+0+ePGlGgBqKd911l9c2n3zyiYwfP94EZIsWLeod+ZWUlMiaNWsa9edWVVWZw62srEySk5PNCDM2NraJrwYAEOo0D+Li4i6ZB5e14MU9nRkfX/8yWXcH6gs+ty+//NIEqU6ZTpkyRU6fPt3g9Ku+OPehwQcAQLOP/GpqauTee+81I7Zt27Z5bXPq1Cnp06ePGfm9+uqr9V5r9erVctVVV0lKSoocPHhQXn75Zbn66qtl+/btEhkZeVF7Rn4AgMsZ+TU5/HR09sUXX5jg69ixo9cODB061IwK165dKy1btmz0tb/77jvp1q2bbNy4UdLS0vz2YgEA4a1Zpz2nTZsm69evly1btngNvvLycrOARVeFZmVl+RR8qmvXrtKuXTspKChoSvcAAGiQT+Gng0QNPg20zZs3m2lKb6mrK0BbtWplRnzR0b5/ZtzRo0fNPb/ERDs3XwIAgij8dJvDypUrZdWqVWZUV1xcbI6ffvrJI/h0Zee7775rzt1tqqura6/TvXt3E6Dq7Nmz8vzzz5vtE4cOHZJNmzbJqFGj5LrrrpPhw4f7+/UCAODbJ7xkZmaax0GDBnmUL1++3GxXyM3NlZ07d5oyDa8LFRYWSpcuXczPujHevVJUF7R888038v7775vFM0lJSSZA58+fL1FRUZf36gAA8Pc+v2DBghcAwBXb5wcAQCgi/AAA1iH8AADWIfwAANYh/AAA1iH8AADWIfwAANYh/AAA1iH8AADWIfwAANYh/AAA1iH8AADWIfwAANYh/AAA1iH8AADWIfwAANYh/AAA1mkR6A4AQLiornHJrsIzcqK8UhJioqVfSrxERjgC3S14QfgBgB9k5xXJvHX7pai0srYsMS5a5qanyogeiQHtGy7GtCcA+CH4pqzM9Qg+VVxaacq1HsGF8AOAy5zq1BGfy0udu0zrtR2CB+EHAJdB7/HVHfFdSCNP67UdggfhBwCXQRe3+LMdrgzCDwAug67q9Gc7XBmEHwBcBt3OoKs669vQoOVar+0QPAg/ALgMuo9PtzOougHoPtd69vsFF8IPAC6T7uPLHN9bnHGeU5t6ruXs8ws+bHIHAD/QgBua6uQTXkIE4QcAfqJBN6Bb20B3A43AtCcAwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOj6FX0ZGhvTt21diYmIkISFBRo8eLfn5+R5tKisrZerUqdK2bVu5+uqrZcyYMXL8+PEGr+tyuWTOnDmSmJgorVu3liFDhsiBAwea9ooAAPBn+OXk5Jhg27Fjh2zYsEHOnz8vw4YNk4qKito2zz77rKxbt04++eQT0/7YsWNy//33N3jdhQsXyuLFi2XZsmWyc+dOadOmjQwfPtwEKQAA/uZw6bCriU6ePGlGgBpyd911l5SWlkr79u1l1apV8sADD5g2//znP+Wmm26S7du3y89+9rOLrqF/fFJSkjz33HMyc+ZMU6bX6dChg6xYsULGjh17yX6UlZVJXFyceV5sbGxTXw4AIMQ1Ng8u656fXlzFx///91Tt2bPHjAZ12tKte/fu0qlTJxN+3hQWFkpxcbHHc7Tj/fv3r/c5VVVV5gVeeAAA0FhNDr+amhqZPn263HnnndKjRw9TpiHWqlUrueaaazza6ihO67xxl2ubxj5H7z1qQLqP5OTkpr4MAICFmhx+eu8vLy9PVq9eLVfarFmzzKjTfRw5cuSK9wEAYFn4TZs2TdavXy9btmyRjh071pY7nU45d+6clJSUeLTX1Z5a5427vO6K0IaeExUVZeZyLzwAAGiW8NPFKRp8WVlZsnnzZklJSfGo79Onj7Rs2VI2bdpUW6ZbIQ4fPiwDBgzwek29hobchc/Re3i66rO+5wAAcMXCT6c6V65caVZz6l4/vSenx08//WTq9f7b5MmTZcaMGWZUqAtgHn30URNiF6701EUwGqDK4XCYe4cLFiyQtWvXyr59+2TChAlmBajuIwQAIKDf5J6ZmWkeBw0a5FG+fPlymTRpkvn5D3/4g0RERJjN7boqU/fr/fGPf/Ror6NB90pR9cILL5i9gk8++aSZMh04cKBkZ2dLdHT05bw2AAD8v88vWLDPDwBwxfb5AQAQigg/AIB1CD8AgHUIPwCAdQg/AIB1CD8AgHUIPwCAdXza5A4AgVZd45JdhWfkRHmlJMRES7+UeImMcAS6WwgxhB+AkJGdVyTz1u2XotLK2rLEuGiZm54qI3okBrRvCC1MewIImeCbsjLXI/hUcWmlKdd6oLEIPwAhMdWpIz5vn8XoLtN6bQc0BuEHIOjpPb66I74LaeRpvbYDGoPwAxD0dHGLP9sBhB+AoKerOv3ZDiD8AAQ93c6gqzrr29Cg5Vqv7YDGIPwABD3dx6fbGVTdAHSfaz37/dBYhB+AkKD7+DLH9xZnnOfUpp5rOfv84As2uQMIGRpwQ1OdfMILLhvhByCkaNAN6NY20N1AiGPaEwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHZ/Db+vWrZKeni5JSUnicDhkzZo1HvVa5u1444036r3mK6+8clH77t27N+0VAQDg7/CrqKiQXr16ydKlS73WFxUVeRzvvfeeCbMxY8Y0eN2bb77Z43nbtm3ztWsAADRKC/HRyJEjzVEfp9Ppcf7ZZ5/J4MGDpWvXrg13pEWLi54LAEDI3fM7fvy4fP755zJ58uRLtj1w4ICZStWQHDdunBw+fLjetlVVVVJWVuZxAAAQFOH3/vvvS0xMjNx///0Ntuvfv7+sWLFCsrOzJTMzUwoLC+XnP/+5lJeXe22fkZEhcXFxtUdycnIzvQIAQDhyuFwuV5Of7HBIVlaWjB492mu9LloZOnSovPXWWz5dt6SkRDp37iyLFi3yOmrUkZ8ebjry0wAsLS2V2NjYJrwSAEA40DzQQdGl8sDne36N9de//lXy8/Pl448/9vm511xzjdxwww1SUFDgtT4qKsocAAAE1bTnu+++K3369DErQ3119uxZOXjwoCQmJjZL3wAAdotoSjDt3bvXHErvz+nPFy5Q0WHnJ598Io8//rjXa6SlpcmSJUtqz2fOnCk5OTly6NAh+eqrr+S+++6TyMhIeeSRR5r2qgBcluoal2w/eFo+2/tv86jnQDjxedpz9+7dZuuC24wZM8zjxIkTzaIVtXr1atFbifWFl47qTp06VXt+9OhR0/b06dPSvn17GThwoOzYscP8DODKys4rknnr9ktRaWVtWWJctMxNT5URPZiNQXi4rAUvoXaDE8Clg2/Kylyp+4+C4z+PmeN7E4AIizzgsz0BGDq1qSM+b78Nu8u0nilQhAPCD4Cxq/CMx1RnXRp5Wq/tgFBH+AEwTpRX+rUdEMwIPwBGQky0X9sBwYzwA2D0S4k3qzrdi1vq0nKt13ZAqCP8ABiREQ6znUHVDUD3udZrOyDUEX4Aauk2Bt3O4IzznNrUc7Y5IJw022d7AghNGnBDU51mVacubtF7fDrVyYgP4YTwA3ARDboB3doGuhtAs2HaEwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYB3CDwBgHcIPAGAdwg8AYJ0Wge4AYKvqGpfsKjwjJ8orJSEmWvqlxEtkhCPQ3QKs4PPIb+vWrZKeni5JSUnicDhkzZo1HvWTJk0y5RceI0aMuOR1ly5dKl26dJHo6Gjp37+/7Nq1y9euASEjO69IBr6+WR55Z4c8s3qvedRzLQcQhOFXUVEhvXr1MmFVHw27oqKi2uOjjz5q8Joff/yxzJgxQ+bOnSu5ubnm+sOHD5cTJ0742j0g6GnATVmZK0WllR7lxaWVppwABIJw2nPkyJHmaEhUVJQ4nc5GX3PRokXyxBNPyKOPPmrOly1bJp9//rm899578tJLL/naRSCopzrnrdsvLi91WqaTnlo/NNXJFCgQagtevvzyS0lISJAbb7xRpkyZIqdPn6637blz52TPnj0yZMiQ/3YqIsKcb9++3etzqqqqpKyszOMAQoHe46s74qsbgFqv7QCEUPjplOcHH3wgmzZtktdff11ycnLMSLG6utpr+1OnTpm6Dh06eJTreXFxsdfnZGRkSFxcXO2RnJzs75cBNAtd3OLPdgCCZLXn2LFja3/u2bOn3HLLLdKtWzczGkxLS/PLnzFr1ixzj9BNR34EIEKBrur0ZzsAQbrPr2vXrtKuXTspKCjwWq91kZGRcvz4cY9yPa/vvqHeU4yNjfU4gFCg2xkS46LNvT1vtFzrtR2AEA6/o0ePmnt+iYmJXutbtWolffr0MdOkbjU1NeZ8wIABzd094IrSRSxz01PNz3UD0H2u9Sx2AYIs/M6ePSt79+41hyosLDQ/Hz582NQ9//zzsmPHDjl06JAJsFGjRsl1111nti646fTnkiVLas91CvOdd96R999/X7799luzSEa3VLhXfwLhZESPRMkc31uccZ5Tm3qu5VoPIMju+e3evVsGDx5ce+6+9zZx4kTJzMyUb775xoRYSUmJ2Qg/bNgwmT9/vpmqdDt48KBZ6OL28MMPy8mTJ2XOnDlmkcutt94q2dnZFy2CAcKFBpxuZ+ATXoDAcLhcLm9bjkKKLnjRVZ+lpaXc/wMAi5U1Mg/4YGsAgHUIPwCAdQg/AIB1CD8AgHUIPwCAdQg/AIB1CD8AgHUIPwCAdQg/AIB1CD8AgHUIPwCAdQg/AIB1CD8AgHUIPwCAdQg/AIB1CD8AgHUIPwCAdQg/AIB1CD8AgHUIPwCAdQg/AIB1CD8AgHUIPwCAdQg/AIB1CD8AgHUIPwCAdQg/AIB1WgS6A0Bzqq5xya7CM3KivFISYqKlX0q8REY4At0tAAFG+CFsZecVybx1+6WotLK2LDEuWuamp8qIHokB7RuAwGLaE2EbfFNW5noEnyourTTlWg/AXoQfwnKqU0d8Li917jKt13YA7ET4IezoPb66I74LaeRpvbYDYCfCD2FHF7f4sx2A8EP4Iezoqk5/tgMQfgg/hB3dzqCrOuvb0KDlWq/tANiJ8EPY0X18up1B1Q1A97nWs98PsBfhh7Ck+/gyx/cWZ5zn1Kaeazn7/AC7sckdYUsDbmiqk094AXD5I7+tW7dKenq6JCUlicPhkDVr1tTWnT9/Xl588UXp2bOntGnTxrSZMGGCHDt2rMFrvvLKK+ZaFx7du3f3tWvARTToBnRrK6Nu/R/zSPABaFL4VVRUSK9evWTp0qUX1f3444+Sm5srs2fPNo+ffvqp5Ofny7333nvJ6958881SVFRUe2zbto3/QgCA4Jj2HDlypDm8iYuLkw0bNniULVmyRPr16yeHDx+WTp061d+RFi3E6XT62h0AAIJvwUtpaamZxrzmmmsabHfgwAEzTdq1a1cZN26cCcv6VFVVSVlZmccBAEBQhF9lZaW5B/jII49IbGxsve369+8vK1askOzsbMnMzJTCwkL5+c9/LuXl5V7bZ2RkmFGm+0hOTm7GVwEACDcOl8vV5E/31RFdVlaWjB49+qI6XfwyZswYOXr0qHz55ZcNhl9dJSUl0rlzZ1m0aJFMnjzZ68hPDzcd+WkA6ijTlz8HABBeNA90UHSpPGiWrQ4afA899JB8//33snnzZp8DSadIb7jhBikoKPBaHxUVZQ4AAIJi2tMdfHoPb+PGjdK2bVufr3H27Fk5ePCgJCayERkAEAThp8G0d+9ecyi9P6c/6wIVDb4HHnhAdu/eLR9++KFUV1dLcXGxOc6dO1d7jbS0NLMK1G3mzJmSk5Mjhw4dkq+++kruu+8+iYyMNPcKAQDwN5+nPTXYBg8eXHs+Y8YM8zhx4kSzWX3t2rXm/NZbb/V43pYtW2TQoEHmZx3VnTp1qrZO7wtq0J0+fVrat28vAwcOlB07dpifAQAIqgUvoXaDEwAQ3hqbB3ywNQDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6LQLdAYS26hqX7Co8IyfKKyUhJlr6pcRLZIQj0N0CgAYRfmiy7LwimbduvxSVVtaWJcZFy9z0VBnRIzGgfQOAhjDtiSYH35SVuR7Bp4pLK0251gNAsCL80KSpTh3xubzUucu0XtsBQDAi/OAzvcdXd8R3IY08rdd2ABCMCD/4TBe3+LMdAFxphB98pqs6/dkOAK40wg8+0+0Muqqzvg0NWq712g4AghHhB5/pPj7dzqDqBqD7XOvZ7wcgWBF+aBLdx5c5vrc44zynNvVcy9nnByCYsckdTaYBNzTVySe8AAg5hB8uiwbdgG5tA90NAPAJ054AAOsQfgAA6xB+AADrEH4AAOsQfgAA6xB+AADrEH4AAOsQfgAA6xB+AADr+Bx+W7dulfT0dElKShKHwyFr1qzxqHe5XDJnzhxJTEyU1q1by5AhQ+TAgQOXvO7SpUulS5cuEh0dLf3795ddu3b52jUAAJon/CoqKqRXr14mrLxZuHChLF68WJYtWyY7d+6UNm3ayPDhw6Wysv4vNv34449lxowZMnfuXMnNzTXX1+ecOHHC1+4BAHBJDpcO1ZpIR35ZWVkyevRoc66X0hHhc889JzNnzjRlpaWl0qFDB1mxYoWMHTvW63V0pNe3b19ZsmSJOa+pqZHk5GR56qmn5KWXXrqofVVVlTncysrKTHv9s2JjY5v6cgAAIU7zIC4u7pJ54Nd7foWFhVJcXGymOt20Expu27dv9/qcc+fOyZ49ezyeExERYc7re05GRoa5rvvQ4AMAoLH8Gn4afEpHehfSc3ddXadOnZLq6mqfnjNr1iyT6u7jyJEjfnsNAIDwF5JfaRQVFWUOAAACPvJzOp3m8fjx4x7leu6uq6tdu3YSGRnp03MAAAia8EtJSTGBtWnTJo+bj7rqc8CAAV6f06pVK+nTp4/Hc3TBi57X9xwAAK7otOfZs2eloKDAY5HL3r17JT4+Xjp16iTTp0+XBQsWyPXXX2/CcPbs2WYFqHtFqEpLS5P77rtPpk2bZs51m8PEiRPl9ttvl379+smbb75ptlQ8+uijl/XiAADwS/jt3r1bBg8eXHuuwaU0vHQ7wwsvvGCC68knn5SSkhIZOHCgZGdnm83rbgcPHjQLXdwefvhhOXnypNkcr4tcbr31VvOcuotgAAAI+D6/UNvXAQAIbwHZ5wcAQCgg/AAA1iH8AADWIfwAANYh/AAA1iH8AADWIfwAANYJyQ+2tk11jUt2FZ6RE+WVkhATLf1S4iUywhHobgFAyCL8glx2XpHMW7dfikora8sS46JlbnqqjOiRGNC+AUCoYtozyINvyspcj+BTxaWVplzrAQC+I/yCeKpTR3zePnvOXab12g4A4BvCL0jpPb66I74LaeRpvbYDAPiG8AtSurjFn+0AAP9F+AUpXdXpz3YAgP8i/IKUbmfQVZ31bWjQcq3XdgAA3xB+QUr38el2BlU3AN3nWs9+PwDwHeEXxHQfX+b43uKM85za1HMtZ58fADQNm9yDnAbc0FQnn/ACAH5E+IUADboB3doGuhsAEDaY9gQAWIfwAwBYh/ADAFiH8AMAWIfwAwBYh/ADAFiH8AMAWIfwAwBYh/ADAFiH8AMAWIfwAwBYh/ADAFiH8AMAWIfwAwBYh/ADAFiH8AMAWIfwAwBYh/ADAFjH7+HXpUsXcTgcFx1Tp0712n7FihUXtY2OjvZ3twAAqNVC/Ozrr7+W6urq2vO8vDwZOnSoPPjgg/U+JzY2VvLz82vPNQABAAiZ8Gvfvr3H+WuvvSbdunWTu+++u97naNg5nU5/dwUAgCt/z+/cuXOycuVKeeyxxxoczZ09e1Y6d+4sycnJMmrUKPnHP/7R4HWrqqqkrKzM4wAAICjCb82aNVJSUiKTJk2qt82NN94o7733nnz22WcmKGtqauSOO+6Qo0eP1vucjIwMiYuLqz00NAEAaCyHy+VySTMZPny4tGrVStatW9fo55w/f15uuukmeeSRR2T+/Pn1jvz0cNORnwZgaWmpuX8IALBTWVmZGRRdKg/8fs/P7fvvv5eNGzfKp59+6tPzWrZsKbfddpsUFBTU2yYqKsocAAAE1bTn8uXLJSEhQe655x6fnqcrRfft2yeJiYnN1TUAgOWaJfz0vp2G38SJE6VFC8/B5YQJE2TWrFm15//7v/8rf/nLX+S7776T3NxcGT9+vBk1Pv74483RNQAAmmfaU6c7Dx8+bFZ51qXlERH/zdwffvhBnnjiCSkuLpZrr71W+vTpI1999ZWkpqbKlVRd45JdhWfkRHmlJMRES7+UeImMYL8hAISjZl3wEmw3OOuTnVck89btl6LSytqyxLhomZueKiN6MP0KAOGWB9Z/tqcG35SVuR7Bp4pLK0251gMAwovV4adTnTri8zb0dZdpvbYDAIQPq8NP7/HVHfFdSCNP67UdACB8WB1+urjFn+0AAKHB6vDTVZ3+bAcACA1Wh59uZ9BVnfVtaNByrdd2AIDwYXX46T4+3c6g6gag+1zr2e8HAOHF6vBTuo8vc3xvccZ5Tm3quZazzw8Awk+zfbB1KNGAG5rq5BNeAMAShN9/aNAN6NY20N0AAFwB1k97AgDsQ/gBAKxD+AEArEP4AQCsQ/gBAKxD+AEArEP4AQCsQ/gBAKxD+AEArBMWn/Dicv3/N62XlZUFuisAgABy54A7F8I6/MrLy81jcnJyoLsCAAiSXIiLi6u33uG6VDyGgJqaGjl27JjExMSIw+EI299mNNyPHDkisbGxge5OSOG9axret6bhfQvs+6aRpsGXlJQkERER4T3y0xfYsWNHsYH+peB/qKbhvWsa3rem4X0L3PvW0IjPjQUvAADrEH4AAOsQfiEiKipK5s6dax7hG967puF9axret9B438JiwQsAAL5g5AcAsA7hBwCwDuEHALAO4QcAsA7hBwCwDuEX5DIyMqRv377mo9sSEhJk9OjRkp+fH+huhZzXXnvNfPTd9OnTA92VoPfvf/9bxo8fL23btpXWrVtLz549Zffu3YHuVtCrrq6W2bNnS0pKinnfunXrJvPnz7/kByzbZuvWrZKenm4+fkz/n1yzZo1Hvb5fc+bMkcTERPM+DhkyRA4cOOD3fhB+QS4nJ0emTp0qO3bskA0bNsj58+dl2LBhUlFREeiuhYyvv/5a/vSnP8ktt9wS6K4EvR9++EHuvPNOadmypXzxxReyf/9++f3vfy/XXnttoLsW9F5//XXJzMyUJUuWyLfffmvOFy5cKG+99VaguxZUKioqpFevXrJ06VKv9fqeLV68WJYtWyY7d+6UNm3ayPDhw6WystK/HdF9fggdJ06c0F8jXTk5OYHuSkgoLy93XX/99a4NGza47r77btczzzwT6C4FtRdffNE1cODAQHcjJN1zzz2uxx57zKPs/vvvd40bNy5gfQp2IuLKysqqPa+pqXE5nU7XG2+8UVtWUlLiioqKcn300Ud+/bMZ+YWY0tJS8xgfHx/oroQEHTXfc889ZuoEl7Z27Vq5/fbb5cEHHzTT7Lfddpu88847ge5WSLjjjjtk06ZN8q9//cuc//3vf5dt27bJyJEjA921kFFYWCjFxcUe/7/qh1T3799ftm/f7tc/Kyy+1cEW+tVNes9Kp6V69OgR6O4EvdWrV0tubq6Z9kTjfPfdd2bqbsaMGfLyyy+b9+7pp5+WVq1aycSJEwPdvaD20ksvma/l6d69u0RGRpp7gK+++qqMGzcu0F0LGcXFxeaxQ4cOHuV67q7zF8IvxEYxeXl55rdJNEy/E+yZZ54x90mjo6MD3Z2Q+gVLR36//e1vzbmO/PTvnN5/Ifwa9uc//1k+/PBDWbVqldx8882yd+9e88uqLuzgvQs+THuGiGnTpsn69etly5Yt1nx34eXYs2ePnDhxQnr37i0tWrQwhy4e0hvp+rP+Vo6L6Qq71NRUj7KbbrpJDh8+HLA+hYrnn3/ejP7Gjh1rVsj+8pe/lGeffdas2EbjOJ1O83j8+HGPcj131/kL4Rfk9J6wBl9WVpZs3rzZLKPGpaWlpcm+ffvMb9/uQ0c0OgWlP+u0FC6mU+p1t9LoPazOnTsHrE+h4scff7zom8P175mOptE4+u+bhpzeO3XTqWRd9TlgwADxJ6Y9Q2CqU6dRPvvsM7PXzz3vrTeBdQ8MvNP3qu59UV0yrXvXuF9aPx2p6MINnfZ86KGHZNeuXfL222+bAw3TvWt6j69Tp05m2vNvf/ubLFq0SB577LFAdy2onD17VgoKCjwWuegvpLqIT987nSpesGCBXH/99SYMde+kTh3rHme/8uvaUfid/ifydixfvjzQXQs5bHVonHXr1rl69Ohhlpd3797d9fbbbwe6SyGhrKzM/P3q1KmTKzo62tW1a1fXr3/9a1dVVVWguxZUtmzZ4vXftIkTJ9Zud5g9e7arQ4cO5u9gWlqaKz8/3+/94Pv8AADW4Z4fAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AwDqEHwDAOoQfAMA6hB8AQGzzf3NERuN3qYSmAAAAAElFTkSuQmCC",
      "text/plain": [
       "<Figure size 500x500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#visualize the data\n",
    "from matplotlib import pyplot as plt\n",
    "plt.figure(figsize=(5,5)) # 参数设置图的尺寸\n",
    "plt.scatter(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "#set up a linear regression model\n",
    "from sklearn.linear_model import LinearRegression\n",
    "lr_model = LinearRegression()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'> (10, 1) <class 'numpy.ndarray'> (10, 1)\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "x = np.array(x)\n",
    "x = x.reshape(-1,1) # 转为10行1列\n",
    "y = np.array(y)\n",
    "y = y.reshape(-1,1)  # 转为10行1列\n",
    "print(type(x),x.shape,type(y),y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'numpy.ndarray'> (10, 1)\n"
     ]
    }
   ],
   "source": [
    "print(type(x),x.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-2 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: #000;\n",
       "  --sklearn-color-text-muted: #666;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-2 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-2 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-2 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: flex;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "  align-items: start;\n",
       "  justify-content: space-between;\n",
       "  gap: 0.5em;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label .caption {\n",
       "  font-size: 0.6rem;\n",
       "  font-weight: lighter;\n",
       "  color: var(--sklearn-color-text-muted);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content {\n",
       "  display: none;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  overflow: visible;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-2 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-2 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-2 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-2 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-2 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-2 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-2 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-2 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 0.5em;\n",
       "  text-align: center;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-2 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-2 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".estimator-table summary {\n",
       "    padding: .5rem;\n",
       "    font-family: monospace;\n",
       "    cursor: pointer;\n",
       "}\n",
       "\n",
       ".estimator-table details[open] {\n",
       "    padding-left: 0.1rem;\n",
       "    padding-right: 0.1rem;\n",
       "    padding-bottom: 0.3rem;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table {\n",
       "    margin-left: auto !important;\n",
       "    margin-right: auto !important;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(odd) {\n",
       "    background-color: #fff;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:nth-child(even) {\n",
       "    background-color: #f6f6f6;\n",
       "}\n",
       "\n",
       ".estimator-table .parameters-table tr:hover {\n",
       "    background-color: #e0e0e0;\n",
       "}\n",
       "\n",
       ".estimator-table table td {\n",
       "    border: 1px solid rgba(106, 105, 104, 0.232);\n",
       "}\n",
       "\n",
       ".user-set td {\n",
       "    color:rgb(255, 94, 0);\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       ".user-set td.value pre {\n",
       "    color:rgb(255, 94, 0) !important;\n",
       "    background-color: transparent !important;\n",
       "}\n",
       "\n",
       ".default td {\n",
       "    color: black;\n",
       "    text-align: left;\n",
       "}\n",
       "\n",
       ".user-set td i,\n",
       ".default td i {\n",
       "    color: black;\n",
       "}\n",
       "\n",
       ".copy-paste-icon {\n",
       "    background-image: url();\n",
       "    background-repeat: no-repeat;\n",
       "    background-size: 14px 14px;\n",
       "    background-position: 0;\n",
       "    display: inline-block;\n",
       "    width: 14px;\n",
       "    height: 14px;\n",
       "    cursor: pointer;\n",
       "}\n",
       "</style><body><div id=\"sk-container-id-2\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>LinearRegression()</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-2\" type=\"checkbox\" checked><label for=\"sk-estimator-id-2\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow\"><div><div>LinearRegression</div></div><div><a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.7/modules/generated/sklearn.linear_model.LinearRegression.html\">?<span>Documentation for LinearRegression</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></div></label><div class=\"sk-toggleable__content fitted\" data-param-prefix=\"\">\n",
       "        <div class=\"estimator-table\">\n",
       "            <details>\n",
       "                <summary>Parameters</summary>\n",
       "                <table class=\"parameters-table\">\n",
       "                  <tbody>\n",
       "                    \n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('fit_intercept',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">fit_intercept&nbsp;</td>\n",
       "            <td class=\"value\">True</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('copy_X',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">copy_X&nbsp;</td>\n",
       "            <td class=\"value\">True</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('tol',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">tol&nbsp;</td>\n",
       "            <td class=\"value\">1e-06</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('n_jobs',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">n_jobs&nbsp;</td>\n",
       "            <td class=\"value\">None</td>\n",
       "        </tr>\n",
       "    \n",
       "\n",
       "        <tr class=\"default\">\n",
       "            <td><i class=\"copy-paste-icon\"\n",
       "                 onclick=\"copyToClipboard('positive',\n",
       "                          this.parentElement.nextElementSibling)\"\n",
       "            ></i></td>\n",
       "            <td class=\"param\">positive&nbsp;</td>\n",
       "            <td class=\"value\">False</td>\n",
       "        </tr>\n",
       "    \n",
       "                  </tbody>\n",
       "                </table>\n",
       "            </details>\n",
       "        </div>\n",
       "    </div></div></div></div></div><script>function copyToClipboard(text, element) {\n",
       "    // Get the parameter prefix from the closest toggleable content\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${text}` : text;\n",
       "\n",
       "    const originalStyle = element.style;\n",
       "    const computedStyle = window.getComputedStyle(element);\n",
       "    const originalWidth = computedStyle.width;\n",
       "    const originalHTML = element.innerHTML.replace('Copied!', '');\n",
       "\n",
       "    navigator.clipboard.writeText(fullParamName)\n",
       "        .then(() => {\n",
       "            element.style.width = originalWidth;\n",
       "            element.style.color = 'green';\n",
       "            element.innerHTML = \"Copied!\";\n",
       "\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        })\n",
       "        .catch(err => {\n",
       "            console.error('Failed to copy:', err);\n",
       "            element.style.color = 'red';\n",
       "            element.innerHTML = \"Failed!\";\n",
       "            setTimeout(() => {\n",
       "                element.innerHTML = originalHTML;\n",
       "                element.style = originalStyle;\n",
       "            }, 2000);\n",
       "        });\n",
       "    return false;\n",
       "}\n",
       "\n",
       "document.querySelectorAll('.fa-regular.fa-copy').forEach(function(element) {\n",
       "    const toggleableContent = element.closest('.sk-toggleable__content');\n",
       "    const paramPrefix = toggleableContent ? toggleableContent.dataset.paramPrefix : '';\n",
       "    const paramName = element.parentElement.nextElementSibling.textContent.trim();\n",
       "    const fullParamName = paramPrefix ? `${paramPrefix}${paramName}` : paramName;\n",
       "\n",
       "    element.setAttribute('title', fullParamName);\n",
       "});\n",
       "</script></body>"
      ],
      "text/plain": [
       "LinearRegression()"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lr_model.fit(x,y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 7.]\n",
      " [ 9.]\n",
      " [11.]\n",
      " [13.]\n",
      " [15.]\n",
      " [17.]\n",
      " [19.]\n",
      " [21.]\n",
      " [23.]\n",
      " [25.]]\n"
     ]
    }
   ],
   "source": [
    "y_predict = lr_model.predict(x)\n",
    "print(y_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[12.]]\n"
     ]
    }
   ],
   "source": [
    "y_3 = lr_model.predict([[3.5]])\n",
    "print(y_3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 7]\n",
      " [ 9]\n",
      " [11]\n",
      " [13]\n",
      " [15]\n",
      " [17]\n",
      " [19]\n",
      " [21]\n",
      " [23]\n",
      " [25]]\n"
     ]
    }
   ],
   "source": [
    "print(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[2.]] [5.]\n"
     ]
    }
   ],
   "source": [
    "#a\\b 打印\n",
    "a = lr_model.coef_\n",
    "b = lr_model.intercept_\n",
    "print(a,b)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "1.4909471108677122e-29 1.0\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import mean_squared_error,r2_score\n",
    "MSE = mean_squared_error(y,y_predict)\n",
    "R2 = r2_score(y,y_predict)\n",
    "print(MSE,R2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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V+r0PaLWbR8/frz8Q1sE7ri4OPk5J8rfogyu1H5nYHkEX375pXwhih1alS5dushbGRFWWrdujS+++EK++El/ib88x4wZIyearV69+oHLitdJGRFexZeZ+DDYvHlztf5SV4tx48aV/y4mHottadGihfyLsk+fPjAG4g8QMVrysMnz+rbPxZwGEabUNs9GDduenZ2Np59+Gm3atJGTqQ3pPTKpim2/N5iJ7RATaUX/RQgT26MEloRqSUyc3bt3L1566aUaPc/CwgJhYWFITEyEvvLw8JA//3qkgGiXPfZXYlhR/HVRk+foQ1gRrwMxaa2ml1sXf7G2atVKr18Hgih1iH1b1XYY2n7/9ddf5V+ZNX3fq32fR0ZGYteuXfjll18qjPyKfSTKemIkubr7rzafD2rc9jI5OTly1ESMim3fvl1+htfle0TN234vEbiFqrajIfY7A0strVmzRtYoRequCTE8fvr0aZlW9ZUY6hQvwH379lX4C0TMCr93NOleYli5Q4cOFZ4jhiJFu6rnqD2siPkJIrSKwz1rSsxrEn+p6PPrQEhJSZH1+aq2w5D2e9moqtgecUSRIexzMToovrTEF/H+/fvle/teYlvFF/S9+08ENjEXp6r9V5vPBzVue1m/xdEz4nX87bff1uqUFA97j6h12/8qNjZW/qxqOxpkv9fJ1F0jI45y8PX11c2ZM+e+x/7+97/r3nzzzfL2woULdT/++KPu0qVLupMnT+rGjRuns7a21p09e1anZjk5ObqYmBh5Ey+TZcuWyd/LjoT54IMPdE5OTrqdO3fq4uLi5Kz45s2b6woKCsrXIY6iWLFiRXl748aNcsb42rVrdefOndO98sorch2pqak6fdn24uJi3ZAhQ3Te3t662NhY3c2bN8tvRUVFVW77jBkzdAcOHNAlJSXpfvvtN13fvn11rq6ucna+vmy7eGzmzJny6BCxHXv37tWFh4frAgICdIWFhXq93x/2eheysrJ0tra2utWrV1e6Dn3c56+99po8ilH0897Xcn5+fvkyr776qvy8279/v+7EiRO6Ll26yNu9AgMDddu2bStvV+fzQe3bLvZ3586ddcHBwbrExMQKy5SWlla67dV9j6h92xMTE3Xvvvuu3N9iO8R+9Pf31z3xxBOK7ncGlloQAUR8qMXHx9/3mDgUTBzWVmbatGnyzS4OhXN3d9cNGjRIFx0drVO7X375RW7jX29l2yYOYZs3b57cJvFl1KdPn/v+P5o1ayYP7byX+EAv+/8Qh7sePXpUp0/bLt68lT0mbuJ5VW372LFjdZ6ennK7mzZtKtviQ0Gftl18mPXr10/XpEkTeair2MaXX375vuChj/v9Ya934YsvvtDZ2NjIQzUro4/7vKrXsjgdQxnxZfP666/rGjduLAPb8OHD5ZfbX9dz73Oq8/mg9m2v6jUhbuJz4N71lD2nuu8RtW97cnKyDCfOzs5y/7Vs2VI3a9YsGeKU3O8m//uPEhEREakW57AQERGR6jGwEBERkeoxsBAREZHqMbAQERGR6jGwEBERkeoxsBAREZHqMbAQERGR6jGwEBERkeoxsBAREZHqMbAQERGR6jGwEBERkeoxsBARERHU7v8DKpPwk2Vq/aQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure()\n",
    "plt.plot(y,y_predict) # 画一条直线\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**MSE越小越好， R2分数越接近1越好** "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**y’vs y集中度越高越好（越接近直线分布)** "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![MSE](images/MSE.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![R2](images/R2.png)"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:sklearn]",
   "language": "python",
   "name": "conda-env-sklearn-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.13.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
